package com.ck.ips.service.store;

import com.ck.common.model.DeviceStore;
import com.ck.common.model.OperationResult;
import com.ck.core.exception.ServiceException;
import com.ck.ips.model.vo.StoreVO;
import com.ck.ips.model.vo.uploadexcel.DeviceExcelVO;
import com.ck.ips.model.vo.uploadexcel.ExcelErrVO;
import com.github.pagehelper.Page;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.IOException;
import java.util.List;

/**
 * @description: 门店service接口
 * @author: zhanglei
 * @date: 2019/4/29 14:29
 */
public interface StoreService {

    /**
     * 分页获取门店列表
     * @param storeName 门店名称
     * @param status 门店状态
     * @param pageNum 当前页
     * @param pageSize 每页行数
     * @return
     */
    Page<StoreVO> listByPage(String storeName, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 添加门店
     * @param storeName 门店名称
     * @param storeFunctionary 门店负责人
     * @param cellPhone 手机号码
     * @param settledPhone 固定电话
     * @param fax 传真
     * @param province 终端位置，省
     * @param city 终端位置，市
     * @param area 终端位置，区
     * @param longitude 经度
     * @param latitude 纬度
     * @param storeAdd 门店详细地址
     * @param storePhoto 门店头像
     * @param coveredPopulation 覆盖人数
     */
    OperationResult<Object> createStroe(String storeName,String storeFunctionary,String cellPhone,String settledPhone,String fax,String province,String city,String area,String longitude,String latitude,String storeAdd,String storePhoto, Long coveredPopulation);

    /**
     * 修改门店
     * @param storeId 门店id
     * @param storeName 门店名称
     * @param storeFunctionary 门店负责人
     * @param cellPhone 手机号码
     * @param settledPhone 固定电话
     * @param fax 传真
     * @param province 终端位置，省
     * @param city 终端位置，市
     * @param area 终端位置，区
     * @param longitude 经度
     * @param latitude 纬度
     * @param storeAdd 门店详细地址
     * @param storePhoto 门店头像
     * @param coveredPopulation 覆盖人数
     */
    OperationResult<Object> updateStore(Long storeId, String storeName, String storeFunctionary,String cellPhone,String settledPhone,String fax, String province, String city, String area, String longitude, String latitude, String storeAdd,String storePhoto, Long coveredPopulation);

    /**
     * 根据id获取门店信息
     * @param storeId 门店id
     * @return
     */
    StoreVO getStoreById(Long storeId);

    /**
     * 修改门店状态
     * @param storeId 门店id
     * @param status 状态 0-启用 1-禁用
     */
    OperationResult<Object> updateStatus(Long storeId,Integer status);

    /**
     * 删除门店
     * @param storeId 门店id
     */
    OperationResult<Object> deleteStore(Long storeId);

    /**
     * 根据地址解析上传的excel文件
     * @param path 上传的文件地址
     * @param originalFilename 文件名称
     * @return
     */
    DeviceExcelVO deviceStoreExcel(String path, String originalFilename) throws ServiceException;

    /**
     * 将错误的单元格标红并上传后返回地址
     * @param excelErrVOList 错误的单元格信息
     * @param path 上传的excel地址
     * @param originalFilename
     * @return
     */
    OperationResult excelErrRed(List<ExcelErrVO> excelErrVOList, String path, String originalFilename) throws IOException;

    /**
     * 将终端信息绑定到门店下
     * @param deviceStoreList 终端信息列表
     * @param storeId 门店id
     * @return
     */
    OperationResult<Object> addDeviceStore(List<DeviceStore> deviceStoreList, Long storeId);


    /**
     *  修改门店序列号
     * @param storeId 门店id
     * @param serialNum 门店序列号
     */
    void updateStoreSerialNum(Long storeId, String serialNum);

    /**
     * 根据门店名称获取门店id
     * @param storeName 门店名称
     * @return 门店id
     */
    Long getStoreIdByName(String storeName);

    /**
     * 根据门店id查看门店导入设备的数量
     * @param storeId 门店id
     * @return 数量
     */
    int getCountByDeviceStore(Long storeId);

    /**
     * 上传excel为门店绑定终端设备解析
     * @param path 上传的excel文件地址
     * @param storeId 门店id
     * @return 解析列表
     */
    OperationResult<Object> uploadExcelDevice(String path, Long storeId);

    /**
     * 确定上传excel
     * @param path 上传的excel文件地址
     * @param storeId 门店id
     */
    OperationResult<Object> uploadExcelDeviceSure(String path, Long storeId);

    /**
     * 导出门店列表excel
     * @param storeName 门店名称
     * @param status 门店状态
     * @return excel表格
     */
    XSSFWorkbook getStoreList(String storeName, Integer status);
}
